package com.zzh.partnersys.common.constant.redis;

/**
 * 聊天相关Redis Key常量
 *
 * @author zzh
 */
public class ChatRedisConstant {

    /**
     * 消息元数据Key前缀
     * 格式: chat:msg:{sessionId}:{chatType}
     * 类型: Sorted Set
     * 说明: 存储消息元数据，score为sequence，value为消息元数据JSON
     */
    public static final String CHAT_MSG_KEY_PREFIX = "chat:msg:";

    /**
     * 消息内容Key前缀
     * 格式: chat:content:{messageId}
     * 类型: String
     * 说明: 存储消息原始内容，1小时过期
     */
    public static final String CHAT_CONTENT_KEY_PREFIX = "chat:content:";

    /**
     * 流式状态Key前缀
     * 格式: chat:stream:status:{messageId}
     * 类型: String
     * 说明: 存储流式状态（RUNNING/COMPLETE/FAILED），10分钟过期
     */
    public static final String CHAT_STREAM_STATUS_KEY_PREFIX = "chat:stream:status:";

    /**
     * 流式内容Key前缀
     * 格式: chat:stream:content:{messageId}
     * 类型: String
     * 说明: 存储AI完整回复内容，10分钟过期
     */
    public static final String CHAT_STREAM_CONTENT_KEY_PREFIX = "chat:stream:content:";

    /**
     * 数据库任务Key前缀
     * 格式: chat:db:task:{messageId}
     * 类型: String
     * 说明: 存储入库失败的任务状态，24小时过期
     */
    public static final String CHAT_DB_TASK_KEY_PREFIX = "chat:db:task:";

    /**
     * 聊天序列号Key前缀
     * 格式: partner:chat:sequence:{chatType}_{targetId}
     * 类型: String
     * 说明: 存储聊天消息序列号，使用INCR命令自增
     */
    public static final String CHAT_SEQUENCE_KEY_PREFIX = "partner:chat:sequence:";

    /**
     * 构建消息元数据Key
     *
     * @param sessionId 会话ID
     * @param chatType  聊天类型
     * @return Redis Key
     */
    public static String buildChatMsgKey(String sessionId, Integer chatType) {
        return CHAT_MSG_KEY_PREFIX + sessionId + ":" + chatType;
    }

    /**
     * 构建消息内容Key
     *
     * @param messageId 消息ID
     * @return Redis Key
     */
    public static String buildChatContentKey(Long messageId) {
        return CHAT_CONTENT_KEY_PREFIX + messageId;
    }

    /**
     * 构建流式状态Key
     *
     * @param messageId 消息ID
     * @return Redis Key
     */
    public static String buildChatStreamStatusKey(Long messageId) {
        return CHAT_STREAM_STATUS_KEY_PREFIX + messageId;
    }

    /**
     * 构建流式内容Key
     *
     * @param messageId 消息ID
     * @return Redis Key
     */
    public static String buildChatStreamContentKey(Long messageId) {
        return CHAT_STREAM_CONTENT_KEY_PREFIX + messageId;
    }

    /**
     * 构建数据库任务Key
     *
     * @param messageId 消息ID
     * @return Redis Key
     */
    public static String buildChatDbTaskKey(Long messageId) {
        return CHAT_DB_TASK_KEY_PREFIX + messageId;
    }

    /**
     * 构建聊天序列号Key
     *
     * @param chatType 聊天类型
     * @param targetId 目标ID
     * @return Redis Key
     */
    public static String buildChatSequenceKey(Integer chatType, Long targetId) {
        return CHAT_SEQUENCE_KEY_PREFIX + chatType + "_" + targetId;
    }
}

